package com.sheng.leetcode.year2023.month01.day27;

import org.junit.Test;

import java.util.HashSet;
import java.util.Set;

/**
 * @author liusheng
 * @date 2023/01/30
 * <p>
 * 2309. 兼具大小写的最好英文字母<p>
 * <p>
 * 给你一个由英文字母组成的字符串 s ，请你找出并返回 s 中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母，则返回一个空字符串。<p>
 * 最好 英文字母的大写和小写形式必须 都 在 s 中出现。<p>
 * 英文字母 b 比另一个英文字母 a 更好 的前提是：英文字母表中，b 在 a 之 后 出现。<p>
 * <p>
 * 示例 1：<p>
 * 输入：s = "lEeTcOdE"<p>
 * 输出："E"<p>
 * 解释：<p>
 * 字母 'E' 是唯一一个大写和小写形式都出现的字母。<p>
 * <p>
 * 示例 2：<p>
 * 输入：s = "arRAzFif"<p>
 * 输出："R"<p>
 * 解释：<p>
 * 字母 'R' 是大写和小写形式都出现的最好英文字母。<p>
 * 注意 'A' 和 'F' 的大写和小写形式也都出现了，但是 'R' 比 'F' 和 'A' 更好。<p>
 * <p>
 * 示例 3：<p>
 * 输入：s = "AbCdEfGhIjK"<p>
 * 输出：""<p>
 * 解释：<p>
 * 不存在大写和小写形式都出现的字母。<p>
 * <p>
 * 提示：
 * 1 <= s.length <= 1000<p>
 * s 由小写和大写英文字母组成<p>
 * <p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/greatest-english-letter-in-upper-and-lower-case">2309. 兼具大小写的最好英文字母</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class LeetCode2309 {

    @Test
    public void test01() {
//        String s = "lEeTcOdE";
//        String s = "arRAzFif";
        String s = "AbCdEfGhIjK";
        System.out.println(new Solution().greatestLetter(s));
    }
}

class Solution {
    public String greatestLetter(String s) {
        Set<Character> set = new HashSet<>();
        for (int i = 0; i < s.length(); i++) {
            set.add(s.charAt(i));
        }
        for (int i = 25; i >= 0; i--) {
            if (set.contains((char) ('a' + i)) && set.contains((char) ('A' + i))) {
                return String.valueOf((char) ('A' + i));
            }
        }
        return "";
    }
}
